package com.example.project2.commen;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
//T 是一个常用的类型参数，用于表示泛型类型,类或方法支持任意类型的数据
public class Result<T> {
    @ApiModelProperty("编码200 400")
    private int code;//状态码0/1，成功 or 失败
    @ApiModelProperty("信息")
    private String message;//状态信息，类似操作成功 or 操作失败
    @ApiModelProperty("数据长度")
    private int total;
    @ApiModelProperty("数据")
    private T content;//示内容，是一个泛型类型，可以是任何类型的数据

//私有构造方法,属于Result<T>,初始化属性
    private Result(int code,String message,int total,T content){
        this.code =code;//参数赋值
        this.message=message;
        this.content=content;
        this.total=total;
    }

     // 静态工厂方法，创建带有附加信息的失败Result对象
    public  static  <T> Result<T> fail(String message) {return new Result<>(400,message,0,null);}
    // 静态工厂方法，创建带有附加信息的失败Result对象
    public  static  <T> Result<T> success(String message) {return new Result<>(200,"成功",0,null);}
   //静态工厂方法创建带有列表数据和总数的成功result对象
    public   static <T> Result<T> success(T content,int total) {return  new Result<>(200,"成功",total,content);}
    //静态工厂方法
    public   static  <T> Result<T>  success (T content,String message,int total  ){
        return  new Result<>(200,message,total,content);
    }

}
